// pages/forum/index.js
const system = require('../../utils/system.js');
import { testPostList } from '../../utils/api';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    statusBarHeight: 20, // 状态栏高度
    navBarHeight: 0,    // 导航栏高度
    bottomSafeHeight: 0, // 底部安全区域高度
    categories: [
      { id: 'all', name: '全部' }
    ],
    currentCategory: 'all',
    posts: [], // 帖子列表
    pageNum: 1, // 当前页码
    pageSize: 10, // 每页数量
    hasMore: true, // 是否还有更多数据
    loading: false, // 是否正在加载
    refreshing: false, // 是否正在刷新
    showBackBtn: false, // 是否显示返回按钮
    btnPosition: {
      x: 300,
      y: 400
    },
    btnInitialized: false,
    userInfo: null,
    debugMode: true // 是否开启调试模式
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('==== 论坛页面开始加载 ====');
    const app = getApp();
    
    // 获取系统状态栏高度
    this.setData({
      statusBarHeight: app.globalData.statusBarHeight || 20,
      bottomSafeHeight: app.globalData.bottomSafeHeight || 0,
      // 初始化按钮位置
      btnPosition: {
        x: wx.getSystemInfoSync().windowWidth - 80, // 屏幕右侧20px位置
        y: wx.getSystemInfoSync().windowHeight - 180  // 屏幕底部150px位置
      }
    });
    
    // 判断是否需要显示返回按钮
    const pages = getCurrentPages();
    this.setData({
      showBackBtn: pages.length > 1
    });
    
    // 在onLoad时先测试API连接
    this.testAPI().then(() => {
      console.log('API连接测试成功，准备加载数据');
    }).catch(err => {
      console.error('API连接测试失败:', err);
    });

    // 从options获取category参数
    if (options.category) {
      this.setData({
        currentCategory: options.category
      });
    }
    
    this.loadPosts();
  },

  /**
   * 测试后端API
   */
  testAPI() {
    console.log('开始测试后端API连接...');
    return testPostList()
      .then(res => {
        console.log('API测试成功:', res);
        return res;
      })
      .catch(err => {
        console.error('API测试失败:', err);
        wx.showToast({
          title: 'API连接失败',
          icon: 'error'
        });
        throw err;
      });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    // 页面初次渲染完成
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    console.log('==== 论坛页面显示 ====');
    // 获取tabBar实例并初始化
    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().init();
    }

    const app = getApp();
    // 获取状态栏高度和安全区高度
    this.setData({
      statusBarHeight: app.globalData.statusBarHeight || 20,
      bottomSafeHeight: app.globalData.bottomSafeHeight || 0,
      userInfo: app.globalData.userInfo
    });

    // 检查是否已登录
    const token = wx.getStorageSync('token');
    const userInfo = wx.getStorageSync('userInfo');
    
    if (!token || !userInfo) {
      console.log('用户未登录，显示登录提示');
      
      this.setData({
        loading: false,
        posts: []
      });
      
      wx.showModal({
        title: '提示',
        content: '请先登录后查看论坛内容',
        confirmText: '去登录',
        cancelText: '取消',
        success: (res) => {
          if (res.confirm) {
            wx.navigateTo({
              url: '/pages/login/index'
            });
          }
        }
      });
      return;
    }

    // 如果已经加载过帖子，就不再重复加载
    if (this.data.posts && this.data.posts.length > 0) {
      console.log('已有帖子数据，不重复加载');
      return;
    }

    // 重置页码，从第一页开始加载
    this.setData({
      pageNum: 1,
      hasMore: true,
      posts: []
    });
    
    // 加载帖子列表
    console.log('onShow中重新加载帖子列表');
    this.loadPosts();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    // 页面隐藏
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 页面卸载
  },

  /**
   * 切换分类
   */
  changeCategory(e) {
    const id = e.currentTarget.dataset.id;
    if (id === this.data.currentCategory) return;
    
    this.setData({
      currentCategory: id
    }, () => {
      this.resetAndReload();
    });
  },

  /**
   * 重置列表并重新加载
   */
  resetAndReload() {
    this.setData({
      posts: [],
      pageNum: 1,
      hasMore: true,
      refreshing: true
    }, () => {
      this.loadPosts().then(() => {
        this.setData({ refreshing: false });
        wx.stopPullDownRefresh();
      });
    });
  },

  /**
   * 加载帖子列表
   */
  async loadPosts() {
    if (this.data.loading || !this.data.hasMore) return;
    
    this.setData({ loading: true });
    console.log('开始加载帖子列表, 页码:', this.data.pageNum);
    
    try {
      const { pageNum, pageSize, currentCategory } = this.data;
      
      // 检查是否已登录
      const token = wx.getStorageSync('token');
      if (!token) {
        console.log('未登录，跳转到登录页面');
        wx.navigateTo({
          url: '/pages/login/index'
        });
        return;
      }
      
      console.log('使用testPostList加载真实帖子数据');
      
      // 直接使用testPostList获取数据
      const response = await testPostList();
      console.log('帖子API响应:', response);
      
      if (!response || response.statusCode !== 200 || !response.data || response.data.code !== 200) {
        throw new Error('获取帖子失败');
      }
      
      // 提取帖子数据 - records数组
      let posts = [];
      if (response.data.data && response.data.data.records && response.data.data.records.length > 0) {
        posts = response.data.data.records;
        console.log('获取到帖子数量:', posts.length);
        console.log('第一条帖子数据:', JSON.stringify(posts[0]));
        console.log('帖子字段:', Object.keys(posts[0]).join(', '));
        
        // 确保所有的字段都存在
        const enhancedPosts = posts.map(post => {
          // 处理images字段 - 可能是JSON字符串
          let imagesList = [];
          if (post.images) {
            try {
              // 如果是字符串，尝试解析为JSON
              if (typeof post.images === 'string') {
                imagesList = JSON.parse(post.images);
              } else if (Array.isArray(post.images)) {
                imagesList = post.images;
              }
            } catch (e) {
              console.error('解析图片数据失败:', e);
            }
          }
          
          // 为null或undefined的字段提供默认值
          return {
            ...post,
            title: post.title || '无标题',
            content: post.content || '无内容',
            username: post.username || '未知用户',
            userAvatar: post.userAvatar || null,
            images: imagesList,
            commentCount: post.commentCount || 0,
            likeCount: post.likeCount || 0,
            isLiked: post.isLiked || false
          };
        });
        
        console.log('增强后的第一条帖子:', JSON.stringify(enhancedPosts[0]));
        
        // 更新页面数据
        this.setData({
          posts: enhancedPosts,
          pageNum: pageNum + 1,
          hasMore: posts.length === pageSize,
          loading: false
        });
        
        console.log('帖子数据已设置, 数量:', this.data.posts.length);
        
        // 设置数据后再次检查
        setTimeout(() => {
          console.log('延迟检查帖子数据:', this.data.posts.length);
          if (this.data.posts.length > 0) {
            console.log('页面显示的第一条帖子:', JSON.stringify(this.data.posts[0]));
          }
        }, 500);
      } else {
        console.warn('没有获取到帖子数据');
        this.setData({
          posts: [],
          hasMore: false,
          loading: false
        });
      }
    } catch (error) {
      console.error('加载帖子失败:', error);
      
      // 显示具体的错误信息
      wx.showToast({
        title: error.message || '加载失败',
        icon: 'none',
        duration: 2000
      });
      
      this.setData({ 
        loading: false,
        hasMore: false
      });
    }
  },
  
  /**
   * 跳转到帖子详情页
   */
  navigateToDetail(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/forum/detail/index?id=${id}`
    });
  },

  /**
   * 预览图片
   */
  previewImage(e) {
    const { urls, current } = e.currentTarget.dataset;
    wx.previewImage({
      current,
      urls,
      fail(err) {
        console.error('预览图片失败', err);
      }
    });
    return false;
  },

  /**
   * 跳转到发帖页面
   */
  navigateToPost() {
    // 如果是拖动结束，不触发跳转
    if (Date.now() - this.touchTime >= 200) {
      return;
    }
    
    console.log('跳转到发帖页面');
    wx.navigateTo({
      url: '/pages/forum/post/index',
      success: () => {
        console.log('成功跳转到发帖页面');
      },
      fail: (error) => {
        console.error('跳转到发帖页面失败:', error);
        wx.showToast({
          title: '跳转失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.resetAndReload();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    // 在scroll-view中不会触发该事件
  },

  /**
   * 加载更多帖子
   */
  loadMorePosts() {
    if (!this.data.loading && this.data.hasMore) {
      this.loadPosts();
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '学习交流论坛',
      path: '/pages/forum/index'
    };
  },

  /**
   * 返回上一页
   */
  navigateBack() {
    wx.navigateBack({
      delta: 1
    });
  },

  // 按钮触摸开始事件
  btnTouchStart(e) {
    this.startX = e.touches[0].clientX;
    this.startY = e.touches[0].clientY;
    this.btnX = this.data.btnPosition.x;
    this.btnY = this.data.btnPosition.y;
    this.touchTime = Date.now(); // 记录触摸开始时间
  },
  
  // 按钮触摸移动事件
  btnTouchMove(e) {
    if (!this.data.btnInitialized) return;
    
    const moveX = e.touches[0].clientX - this.startX;
    const moveY = e.touches[0].clientY - this.startY;
    
    // 更新按钮位置
    this.setData({
      btnPosition: {
        x: this.btnX + moveX,
        y: this.btnY + moveY
      }
    });
  },
  
  // 按钮触摸结束事件
  btnTouchEnd(e) {
    // 如果触摸时间小于200ms，视为点击，不处理拖动
    if (Date.now() - this.touchTime < 200) {
      return;
    }
    
    // 获取系统信息，确保按钮不会超出屏幕
    wx.getSystemInfo({
      success: (res) => {
        let { x, y } = this.data.btnPosition;
        
        // 限制按钮在屏幕内
        if (x < 50) x = 50;
        if (x > res.windowWidth - 50) x = res.windowWidth - 50;
        if (y < 100) y = 100; // 避免按钮太靠近顶部
        if (y > res.windowHeight - 100) y = res.windowHeight - 100;
        
        this.setData({
          btnPosition: { x, y }
        });
        
        // 保存按钮位置到本地存储，下次打开页面时恢复
        try {
          wx.setStorageSync('forum_btn_position', { x, y });
        } catch (e) {
          console.error('保存按钮位置失败', e);
        }
      }
    });
  }
});